package com.hspedu.array_;

import java.util.Arrays;
import java.util.Comparator;

/**
 * @author DL5O
 * @version 1.0
 */
public class ArraysSortCustom {
    public static void main(String[] args) {
        int[] arr = {1, -1, 8, 0, 20};
        bubble02(arr, new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                int i1 = (Integer) o1;//自动拆包  o1.intValue
                int i2 = (Integer) o2;
                return i2-i1;//i2-i1

            }
        });
        System.out.println("===排序后===");
        System.out.println(Arrays.toString(arr));
    }

    //使用冒泡完成排序
    public static void bubble01(int[] arr) {
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = 0; j < arr.length - 1 - i; j++) {
                int temp = 0;
                //从小到大排序
                if (arr[j] > arr[j + 1]) {
                    temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
    }

    //结合冒泡 + 定制
    public static void bubble02(int[] arr, Comparator c) {
        int temp = 0;
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = 0; j < arr.length - 1 - i; j++) {
                //从小到大排序
                //如果compare的返回值>0
                // 代表arr[j]大于arr[j+1] 或arr[j+1] 大于arr[j]，把
                // if
                //  若为第一种情况，arr[j] > arr[j+1] 则执行，从小到大的排序，每趟排序都把最大的移到 arr.length - 1 -i的位置上
                //  若为第二种情况，arr[j+1] > arr[j] 则执行，从大到小的排序，每趟排序都把最小的的移到 arr.length - 1 -i的位置上
                // else 返回值为0 或者 返回值为-数 则不换位置
                //  则不执行交换，不动，改良了原来的冒泡排序
                if (c.compare(arr[j],arr[j+1])>0) {
                    temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;

                }
            }
        }
    }
}
